package java_thinking.unit_20;

/**
 * @Desc:   注解
 *      1.也被称为元数据，为我们在代码中添加信息提供了另一种形式化的方法，使我们可以在稍后某个时刻非常方便的使用这些数据
 *      2.@Retention元注解的讲解：其三种取值：RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME
 *        分别对应：Java源文件(.java文件)---->.class文件---->内存中的字节码
 *      3.一个注解的生命周期有三个阶段：java源文件是一个阶段(SOURCE)，class文件是一个阶段(CLASS)，内存中的字节码是一个阶段(RUNTIME)
 *        javac把java源文件编译成.class文件时，有可能去掉里面的注解，类加载器把.class文件加载到内存时也有可能去掉里面的注解
 *
 *      4.@Override是给javac(java编译器)看的，编译完以后就@Override注解就没有价值了 因此@Override的Retention的属性值是RetentionPolicy.SOURCE
 *        @SuppressWarnings 是给javac(java编译器)看的，编译器编译完java文件后，@SuppressWarnings注解就没有用了
 *
 *      5.@FunctionalInterface：这个注解表示一个函数式接口元素。函数式接口是一种只有一个抽象方法（非默认）的接口。
 *        编译器会检查被注解元素，如果不符，就会产生错误。
 *
 *      6.https://www.cnblogs.com/understander/p/5528789.html
 *
 * @author: cww
 * @DateTime: 2019-05-26 17:36
 */

public class AnnotationTheory {
}
